package __Colly

import (
	"fmt"
	"github.com/gocolly/colly"
	"github.com/gocolly/colly/proxy"
)

//创建一个采集器
//注册回调函数
//访问具体网站

//go get -u github.com/gocolly/colly

func main() {
	//创建 collector
	c := colly.NewCollector(
		//设置 useragent
		colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"),
	)

	//事件监听，通过 callback 执行事件处理
	/*OnRequest 请求执行之前调用
	OnResponse 响应返回之后调用
	OnHTML 监听执行 selector
	OnXML 监听执行 selector
	OnHTMLDetach，取消监听，参数为 selector 字符串
	OnXMLDetach，取消监听，参数为 selector 字符串
	OnScraped，完成抓取后执行，完成所有工作后执行
	OnError，错误回调*/
	c.OnRequest(func(r *colly.Request) {
		fmt.Println("请求前调用:", r.URL)
	})
	c.OnError(func(_ *colly.Response, err error) {
		fmt.Println("发生错误调用:", err)
	})

	c.OnResponse(func(r *colly.Response) {
		fmt.Println("获得响应后调用:", r.Request.URL)
	})
	c.OnHTML(".sidebar-link", func(e *colly.HTMLElement) {
		e.Request.Visit(e.Attr("href"))
	})
	c.OnScraped(func(r *colly.Response) {
		fmt.Println("结束后调用:", r.Request.URL)
	})
	//c.Visit() 正式启动网页访问
	c.Visit("https://gorm.io/zh_CN/docs/")

	//轮询方式实现代理切换的函数
	if p, err := proxy.RoundRobinProxySwitcher(
		"socks5://127.0.0.1:1337",
		"socks5://127.0.0.1:1338",
		"http://127.0.0.1:8080",
	); err == nil {
		c.SetProxyFunc(p)
	}

}
